// 测试链接：https://www.luogu.com.cn/problem/P2678
// 请同学们务必参考如下代码中关于输入、输出的处理
// 这是输入输出处理效率较高的写法
// 提交以下的所有代码，可以直接通过

#include <bits/stdc++.h>

using namespace std;

const int MAXN = 50010;
int arr[MAXN];
int L, N, M;

inline int read()
{
    char ch = getchar();
    int x = 0, f = 1;
    while(ch < '0' || ch > '9')
    {
        if(ch == '-') f = -1;
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9')
    {
        x = 10 * x + ch - '0';
        ch = getchar();
    }
    return f * x;
}

// 让最短的跳跃距离为m，能否让移除的石块小于M
bool check(int m)
{
    int last = 0, cnt = 0;
    for(int i = 1; i <= N + 1; ++i)
    {
        // 移除i位置上的石头
        if(arr[i] - arr[last] < m) ++cnt;
        else last = i;
    }
    return cnt <= M;
}

int compute()
{
    int l = 1, r = L, m, ans = 0;
    while(l <= r)
    {
        m = l + ((r - l) >> 1);
        if(check(m))
        {
            ans = m;
            l = m + 1;
        }
        else r = m - 1;
    }
    return ans;
}

int main()
{
    L = read(), N = read(), M = read();
    for(int i = 1; i <= N; ++i) arr[i] = read();
    arr[N + 1] = L;
    printf("%d\n", compute());

    return 0;
}